Estatística e econometria para gestão de risco de crédito e da formação da carteira de investimentos
Ano/Semestre: 2020/1
Professor: Prof. Msc. Davi Souza Simon
A estatística é a arte de torturar os números até que eles confessem.
install.packages("dslabs", repos = "http://cran.us.r-project.org")
install.packages("ggplot2", repos = "http://cran.us.r-project.org")
install.packages("tidyverse", repos = "http://cran.us.r-project.org")
library(tidyverse)
library(ggplot2)
library(dslabs)
ds_theme_set()
install.packages("tidyverse", repos = "http://cran.us.r-project.org")
The downloaded binary packages are in
/var/folders/1z/gzlgfsf57b902d0l18952m1r0000gn/T//Rtmp5et3bW/downloaded_packages
library(tidyverse)
Analise
mpg
# A tibble: 234 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l… f 18 29 p comp…
2 audi a4 1.8 1999 4 manual… f 21 29 p comp…
3 audi a4 2 2008 4 manual… f 20 31 p comp…
4 audi a4 2 2008 4 auto(a… f 21 30 p comp…
5 audi a4 2.8 1999 6 auto(l… f 16 26 p comp…
6 audi a4 2.8 1999 6 manual… f 18 26 p comp…
7 audi a4 3.1 2008 6 auto(a… f 18 27 p comp…
8 audi a4 quat… 1.8 1999 4 manual… 4 18 26 p comp…
9 audi a4 quat… 1.8 1999 4 auto(l… 4 16 25 p comp…
10 audi a4 quat… 2 2008 4 manual… 4 20 28 p comp…
# … with 224 more rows
Analise
summary(mpg)
manufacturer model displ year
Length:234 Length:234 Min. :1.600 Min. :1999
Class :character Class :character 1st Qu.:2.400 1st Qu.:1999
Mode :character Mode :character Median :3.300 Median :2004
Mean :3.472 Mean :2004
3rd Qu.:4.600 3rd Qu.:2008
Max. :7.000 Max. :2008
cyl trans drv cty
Min. :4.000 Length:234 Length:234 Min. : 9.00
1st Qu.:4.000 Class :character Class :character 1st Qu.:14.00
Median :6.000 Mode :character Mode :character Median :17.00
Mean :5.889 Mean :16.86
3rd Qu.:8.000 3rd Qu.:19.00
Max. :8.000 Max. :35.00
hwy fl class
Min. :12.00 Length:234 Length:234
1st Qu.:18.00 Class :character Class :character
Median :24.00 Mode :character Mode :character
Mean :23.44
3rd Qu.:27.00
Max. :44.00
unique(mpg$manufacturer)
[1] "audi" "chevrolet" "dodge" "ford" "honda"
[6] "hyundai" "jeep" "land rover" "lincoln" "mercury"
[11] "nissan" "pontiac" "subaru" "toyota" "volkswagen"
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = manufacturer))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
Informações Históricas da Natura S.A.
dados <- read_excel("NaturaTrim.xlsx",sheet=1, col_names = TRUE, col_types = NULL, na = "-", skip = 2)
Inspecionando o objeto importado
Inspecionando o objeto importado
Renomear colunas e reinspecionar o objeto Dados
colnames(dados) <- c("Data","Div_p_acao","Valor_Mercado","Ativo_Total","Patrim_Liq","Preço_Lucro"
,"Retorno","Cotação","EBIT","Lucro_Liq","CaixaEq","Apl_Fin","Divida_Bruta",
"Liq_Bolsa","Negociabilidade","Beta2anos","Beta3anos","Debt_to_Equity",
"IDIV","IBOV","ISEE")
Como poderíamos analisar o valor de mercado da Companhia ao longo do tempo?
VM <- dados %>%
select(Data,Valor_Mercado)
Como poderíamos analisar o valor de mercado da Companhia ao longo do tempo?
ggplot(data = VM) +
geom_point(mapping = aes(x = Data, y= Valor_Mercado)) +
theme(axis.text.x=element_text(angle=90, hjust=1))
Ajustando as datas
library(zoo)
VM$Data <- gsub("T","Q",VM$Data)
VM$Data <- as.Date(as.yearqtr(VM$Data, format = "%qQ%Y"))
Como poderíamos analisar o valor de mercado da Companhia ao longo do tempo?
ggplot(data = VM) +
geom_line(mapping = aes(x = Data, y= Valor_Mercado)) +
theme(axis.text.x=element_text(angle=90, hjust=1))
Retornos
Retornos <- dados %>%
select(Data,Retorno)
Retornos$Data <- gsub("T","Q",Retornos$Data)
Retornos$Data <- as.Date(as.yearqtr(Retornos$Data, format = "%qQ%Y"))
Descrição estatística dos retornos
É média é a medida central mais comumente reportada. É a soma de todos os valores de nossas observações dividida pela quantidade de observações. Se temos \( n \) observações, a média é dada por:
\[ Média = \frac{x_1 + x_2 + \cdots + x_n}{n} \]
A mediana é outra medida de tendência central. É importante pois a média pode ser altamente influenciável por observações com valores extremos. Ordenamos os valores de nossas observações do menor para o maior. O elemento do meio da lista é a mediana. Se a quantidade de obs for par, a mediana é a média dos dois termos centrais.
A média não nos diz muito sobre a variabilidade das observações. Um conjunto formado por {0,100} tem a mesma média de um conjunto formado por {40,60}.
Para saber mais sobre a variabilidade, gostaríamos de uma medida de variação média.
Desvio-padrão de uma amostra de dados resolve o problema da média 0. Apesar da fórmula parecer complexa, essencialmente ela nos diz essencialmente a distãncia de uma váriável em relação a sua própria média:
\( Desvio \, Padrão = \sqrt{\frac{(x_1 - Média)^2 + (x_2 - Média)^2 + \cdots + (x_n - Média)^2}{n - 1}} \)
\( Variância = {\frac{(x_1 - Média)^2 + (x_2 - Média)^2 + \cdots + (x_n - Média)^2}{n - 1}} \)
summary(Retornos)
Data Retorno
Min. :2004-01-01 Min. :-27.669
1st Qu.:2007-06-08 1st Qu.: -7.056
Median :2010-11-16 Median : 5.269
Mean :2010-11-15 Mean : 4.363
3rd Qu.:2014-04-23 3rd Qu.: 17.584
Max. :2017-10-01 Max. : 34.083
NA's :2
Retornos <- Retornos %>% filter(!is.na(Retorno))
summary(Retornos)
Data Retorno
Min. :2004-07-01 Min. :-27.669
1st Qu.:2007-10-24 1st Qu.: -7.056
Median :2011-02-15 Median : 5.269
Mean :2011-02-15 Mean : 4.363
3rd Qu.:2014-06-08 3rd Qu.: 17.584
Max. :2017-10-01 Max. : 34.083
ggplot(data = Retornos) +
geom_line(mapping = aes(x = Data, y= Retorno)) +
theme(axis.text.x=element_text(angle=90, hjust=1))
ggplot(data = Retornos) +
geom_histogram(mapping = aes( x= Retorno), binwidth = 2, colour = "white", fill = "cornflowerblue", size = 0.1) +
theme_bw() +
stat_function(fun = function(x) dnorm(x, mean = mean(Retornos$Retorno), sd = sd(Retornos$Retorno)) * length(Retornos$Retorno)*2 ,
color = "darkred", size = 1)
Se a distribuição dos retornos for normal, poderíamos realizar inferência.
[1] "numeric"
Inspecionem o objeto Retornos após rodar o código abaixo
Retornos <- Retornos %>%
mutate( media = mean(Retorno),
x_menos_m = Retorno - media,
x_menos_m2 = x_menos_m^2)
sum(Retornos$x_menos_m)
[1] -6.661338e-15
sum(Retornos$x_menos_m2)
[1] 13092.41
sum(Retornos$x_menos_m2)/(length(Retornos$x_menos_m2)-1)
[1] 247.0267
var(Retornos$Retorno)
[1] 247.0267
sqrt(sum(Retornos$x_menos_m2)/(length(Retornos$x_menos_m2)-1))
[1] 15.71708
sd(Retornos$Retorno)
[1] 15.71708
median(Retornos$Retorno)
[1] 5.268972